Skip to content

fix: fail-open on API rate limit in check_skip_if_check_failing; sudo for AWF binary verification on GPU runners#24482

Merged
pelikhan merged 4 commits intomainfrom
copilot/whm-fix-daily-issues-report-generator
Apr 4, 2026
Merged

fix: fail-open on API rate limit in check_skip_if_check_failing; sudo for AWF binary verification on GPU runners#24482
pelikhan merged 4 commits intomainfrom
copilot/whm-fix-daily-issues-report-generator

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 4, 2026

Two independent pre_activation failures identified in the WHM dashboard: API rate limiting cascades into workflow cancellation, and install_awf_binary.sh fails with Permission denied on aw-gpu-runner-T4.

API rate limit: fail-open in check_skip_if_check_failing.cjs

When multiple workflows fire simultaneously (~05:00–05:40 UTC), the GitHub installation API rate limit is exhausted. check_skip_if_check_failing was calling core.setFailed() on the caught error, killing pre_activation entirely.

Now detects rate-limit errors via /\bapi rate limit\b|\brate limit exceeded\b/i and fails open (sets output true, emits warnings) — consistent with how other pre-activation checks handle transient API errors. Non-rate-limit errors still hard-fail.

// Before
} catch (error) {
  core.setFailed(`${ERR_API}: Failed to fetch check runs for ref "${ref}": ${getErrorMessage(error)}`);
}

// After
} catch (error) {
  const errorMsg = getErrorMessage(error);
  if (/\bapi rate limit\b|\brate limit exceeded\b/i.test(errorMsg)) {
    core.warning(`⚠️ API rate limit exceeded while checking CI status for ref "${ref}": ${errorMsg}`);
    core.warning(`Allowing workflow to proceed (fail-open on rate limit)`);
    core.setOutput("skip_if_check_failing_ok", "true");
  } else {
    core.setFailed(`${ERR_API}: Failed to fetch check runs for ref "${ref}": ${errorMsg}`);
  }
}

AWF binary verification: sudo on GPU runners (install_awf_binary.sh)

The Daily Issues Report has been failing since Mar 24 at step Install AWF binary with exit code 126:

✓ Installed awf bundle to /usr/local/lib/awf/awf-bundle.js
env: '/usr/local/bin/awf': Permission denied

The script installs the wrapper via sudo tee + sudo chmod +x, but the post-install version check ran without sudo. On aw-gpu-runner-T4, the runner user cannot execute from /usr/local/bin directly — only via sudo, which is also how every subsequent awf invocation works (sudo -E awf ...).

# Before
env -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \
    "${AWF_INSTALL_DIR}/${AWF_INSTALL_NAME}" --version

# After
sudo env -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \
    "${AWF_INSTALL_DIR}/${AWF_INSTALL_NAME}" --version

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE xvLX0kW/sVnmb7t6bvjB4TkNQWQQ env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE /sh GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
  • https://api.github.com/orgs/test-owner/actions/secrets
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name ath ../../../.pr**/*.json -trimpath k/_temp/ghcca-no../../../.prettierignore -p github.com/githu-c -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x-f -ato�� nore --log-level=error 2>&1 -buildtags k/gh-aw/gh-aw/actions/node_modul-f -errorsas -ifaceassert -nilfunc /opt/hostedtoolc-test.v=true (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --show-toplevel git /bin/sh --get remote.origin.urrev-parse /opt/hostedtoolc--show-toplevel /bin/sh -c git-upload-pack 'origin' git-upload-pack 'origin' /usr/bin/infocmp vars.MY_VAR git /usr/bin/git infocmp (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha .github/workflows/test.md sh /usr/bin/git ../pkg/workflow/git go x_amd64/link git rev-�� --show-toplevel x_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha --show-toplevel git /usr/local/bin/iptables --show-toplevel git /usr/bin/git iptables -w -t security /usr/bin/git OUTPUT -d 168.63.129.16 git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha --pack_header=2,3 -q om/testowner/testrepo.git -unreachable=falgit /tmp/go-build307rev-parse bin/node git rev-�� --show-toplevel /opt/hostedtoolcformat:pkg-json /usr/bin/infocmp tem ]; then /usrgit /tmp/go-build307rev-parse cal/bin/sh infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha --show-toplevel git /usr/bin/git --get remote.origin.urrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel node /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha xterm-color git /usr/bin/git --show-toplevel git /usr/lib/git-cor--show-toplevel git -C /tmp/compile-all-instructions-test-172964484/.github/workflows remote /usr/bin/git h git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha */*.ts' '**/*.jsremote.origin.url -f /usr/bin/git l owner=github -f git -C */*.json' '!../../../pkg/workfloremote.origin.url rev-parse 64/pkg/tool/linux_amd64/vet -json GO111MODULE x_amd64/vet 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha x_amd64/vet Qh/xrIeUaAzol4-sW1fr5uG/_OsLyfG3ssrqX-MtPgK_ (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel sh /usr/bin/git npx prettier --wgit 64/pkg/tool/linurev-parse /usr/bin/find git rev-�� --show-toplevel find /usr/bin/git runs/20260404-13git -lname /opt/hostedtoolc--show-toplevel git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha /repos/actions/github-script/git/ref/tags/v8 --jq /usr/bin/git on' --ignore-patgit l /home/REDACTED/go/--show-toplevel git comm�� -m Initial commit /usr/bin/git k/gh-aw/gh-aw/.ggit :latest /opt/hostedtoolc--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha b.actor }}, Repo: ${{ github.repository }} sh /usr/bin/git Gitbranch_with_hgit Gitbranch_with_hrev-parse /usr/local/.ghcu--show-toplevel git init�� 64/bin/go bash /usr/bin/git ./../pkg/workflogit go x_amd64/vet git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --show-toplevel git /usr/bin/git st-3748951737/.ggit config /home/REDACTED/go/--show-toplevel git rev-�� --show-toplevel sh /usr/bin/git /v2.0.0 =main ache/go/1.25.8/x--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha se 4489570/b370/vet.cfg ache/node/24.14.1/x64/bin/bash GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcache/go/1.25.8/x-f -uns�� h ../../../.prettierignore /tmp/go-build3074489570/b135/vetowner=github k/gh-aw/gh-aw/actions/setup/js/n-f 7758964/b396/_pksh GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/xrev-parse (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha re --log-level=error /tmp/go-build3074489570/b237/vet.cfg me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -json GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linurev-parse /pre�� ithub/workflows -buildtags /opt/hostedtoolcache/uv/0.11.3/x86_64/bash -errorsas -ifaceassert -nilfunc bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha 01 elism repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } IGnX/O7agUHkByCk/tmp/go-build7929126/b411/fileutil.test GO111MODULE ode-gyp-bin/sh /opt/hostedtoolc-test.v=true k/gh�� -bool -buildtags me: String!) { -test.short=true -errorsas -ifaceassert -nilfunc ache/go/1.25.8/x-test.v=true (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha xterm-color sh /usr/bin/git on' --ignore-patgit -tests sh git chec�� -b feature-branch /usr/bin/git ./../pkg/workflogit xvT9vCZYQqef /opt/hostedtoolc--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel n-YEHBy/yadxe5BBrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha --show-toplevel git ache/node/24.14.1/x64/bin/node ub/workflows git /usr/bin/git git t-27�� bility_SameInputSameOutput1734441432/001/stability-test.md git ache/node/24.14.1/x64/bin/node /workflows git /usr/bin/git gh (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha /home/REDACTED/work/gh-aw/gh-aw/.github/workflows/auto-triage-issues.md sh /usr/bin/git on' --ignore-patgit -tests _modules/.bin/sh--show-toplevel git rev-�� --show-toplevel bash /usr/bin/git lic_711202664/00git go /home/REDACTED/go/--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha --show-toplevel git x_amd64/asm user.name Test User /usr/bin/git x_amd64/asm rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --git-dir git /usr/bin/git /workflows gh /usr/bin/git /usr/bin/git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq .object.sha tructions-test-3175032358/.github/workflows ache/go/1.25.8/xconfig /usr/bin/git rror GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/xformat:cjs /usr/bin/git se 4489570/b371/vetrev-parse repository(owne--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git om/testorg/testrepo.git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .visibility -json GO111MODULE 64/pkg/tool/linu-f GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linurev-parse env t.go t_test.go r: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linumcp/notion (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha /tmp/file-tracker-test1308103933/existing.md ache/go/1.25.8/x-test.v=true /opt/hostedtoolcache/node/24.14.1/x64/bin/node on' --ignore-patgit -tests (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha --show-toplevel git /usr/bin/git b/workflows git /usr/bin/git git conf�� user.name Test User /usr/bin/infocmp --show-toplevel git /usr/bin/git infocmp (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha bility_SameInputSameOutput2881515339/001/stabili@{u} ache/go/1.25.8/x-f ache/node/24.14.1/x64/bin/node se 4489570/b251/vetrev-parse ache/go/1.25.8/x--show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linutest@example.com t-32�� k/gh-aw/gh-aw/.github/workflows/ace-editor.md -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha /repos/actions/github-script/git/ref/tags/v8 --jq /usr/lib/git-core/git --show-toplevel git /usr/bin/tr /usr/lib/git-core/git main�� ErrorFormatting3399673733/001 --auto /usr/bin/git --detach git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha "prettier" --write '../../../**/*.json' '!../../../pkg/workflow/js/**/*.json' ---errorsas -cmin ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -delete 4489570/b252/vetrev-parse bin/node ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linurev-parse /opt/hostedtoolcache/node/24.14.1/x64/bin/node --noprofile GOPROXY modules/@npmcli/--show-toplevel node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha ithub-script/git/ref/tags/v8 git /usr/lib/git-core/git-upload-pack --show-toplevel git x_amd64/link git-upload-pack /tmp�� /usr/bin/git x_amd64/link /usr/bin/git ddc0d5d3f94c4329git git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name 64/pkg/tool/linuconfig ache/node/24.14.1/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node--show-toplevel elism check_skipgit .cfg 64/pkg/tool/linu--show-toplevel git k/gh�� 0916-32856/test-3904006013 on rkflow/js/**/*.json /../../.prettiergit erignore r: $owner, name:--show-toplevel node (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 rev-parse /usr/bin/gh -json .cfg es/.bin/node /usr/bin/gh api 1147990675 -f /usr/sbin/sh ./../.prettieriggit owner=github -f sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.8/xremote /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name description_test.go k/gh-aw/gh-aw/actions/setup/js/node_modules/.bin-nilfunc ctions-build/maigit enerate-action-minit nomaly.go nomaly_test.go lust�� RequiresMinIntegrity1015451278/001 oordinator.go /opt/hostedtoolcache/go/1.25.8/x64/bin/gofmt -json GO111MODULE 64/pkg/tool/linu--show-toplevel /opt/hostedtoolcache/go/1.25.8/xTest User (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 race cal/bin/sh -json .cfg ode-gyp-bin/node--show-toplevel git -C te '../../../**/*.json' '!../../../pkg/workflow/js/**/*.json' ---errorsas rev-parse 64/pkg/tool/linux_amd64/vet -json .cfg 64/pkg/tool/linu--show-toplevel 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name currency.go cfg.link currency_validatgit currency_validatrev-parse currency_validat--show-toplevel bAEs2L_tvFwwIUrvHS/43QkPWkqANNaz-M8ckJ-/J4-Ie08Jremote.origin.url fig_�� te '../../../**/*.json' '!../../../pkg/workflow/js/**/*.json' ---run=^Test figure_ghe_step_test.go c0ec183f25a9bef82c32861d32f062e492f8785a07244f114ce90e2dac57d140-d -json GO111MODULE $name) { has--show-toplevel /bin/sh (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 -f k/_temp/uv-python-dir/sh -f owner=github -f /usr/bin/gh api te '../../../**/*.json' '!../../../pkg/workflow/js/**/*.json' ---p -f /home/REDACTED/work/_temp/uv-python-dir/sh -f owner=github -f sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name rev-parse k/gh-aw/gh-aw/actions/setup/js/node_modules/.bin/node elism check_skipgit .cfg 64/pkg/tool/linu--show-toplevel docker k/gh�� 0916-32856/test-3904006013 on rkflow/js/**/*.json /../../.prettiergit erignore sole.test node (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 rev-parse ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -json .cfg 64/pkg/tool/linu--show-toplevel ache/go/1.25.8/x64/pkg/tool/linuremote1 -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /home/REDACTED/.cargo/bin/sh ./../.prettieriggh GO111MODULE 64/pkg/tool/linulist sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name config k/gh-aw/gh-aw/actions/setup/node_modules/.bin/node remote.origin.urgit .cfg r: $owner, name:--get /usr/bin/gh k/gh�� 0916-32856/test-3904006013 on rkflow/js/**/*.json /../../.prettiergit erignore -f node (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 rev-parse 1/x64/bin/node -json GO111MODULE ode_modules/.bin--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet hash�� Imports2397484180/001/inlined-a.md rev-parse e/git-upload-pack ./../.prettieriggit GO111MODULE ser.test sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel /usr/bin/gh /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.8/xrev-parse /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name 64/pkg/tool/linuconfig k/gh-aw/gh-aw/node_modules/.bin/node elism check_skipgit .cfg r: $owner, name:--show-toplevel git k/gh�� /home/REDACTED/work/gh-aw/gh-aw/.github/workflows on rkflow/js/**/*.json /../../.prettiergit erignore 64/pkg/tool/linu--show-toplevel node (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 config ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm remote.origin.urgit GO111MODULE $name) { has--show-toplevel ache/go/1.25.8/x64/pkg/tool/linuorigin -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows config ache/go/1.25.8/x64/pkg/tool/linux_amd64/link ./../.prettieriggit GO111MODULE $name) { has--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel infocmp /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel e/git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name rev-parse k/gh-aw/node_modules/.bin/node elism check_skipgit .cfg 64/pkg/tool/linu-f git k/gh�� /home/REDACTED/work/gh-aw/gh-aw/.github/workflows on rkflow/js/**/*.json /../../.prettiergit erignore 64/pkg/tool/linu--show-toplevel node (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 config ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile remote.origin.urgit GO111MODULE $name) { has--show-toplevel ache/go/1.25.8/x64/pkg/tool/linuupstream -C 0916-32856/test-3521981518/custom/workflows config 9126/b001=> ./../.prettieriginfocmp b/gh-aw/actions/-1 r: $owner, name:xterm-color sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� 740477526/.github/workflows git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path 93230899/001' 93230899/001' repository(owne../../../.prettierignore eckSkipIfCheckFanode GOWORK 64/bin/go /opt/hostedtoolc--write -uns�� ithub/workflows /tmp/go-build307--ignore-path e_modules/.bin/s../../../.prettierignore -json GO111MODULE 64/bin/go /opt/hostedtoolc-buildtags (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 -ifaceassert ed } } /opt/hostedtoolc--json -o json' --ignore-p--repo -importcfg sh -s -w ed } } sh (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6 owner=github -f git ache�� auto-triage-issues.md config /usr/bin/git remote.origin.urgit GO111MODULE r git (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github%2Fworkflows%2Faudit-workflows.md
    • Triggering command: /opt/hostedtoolcache/node/24.14.1/x64/bin/node /opt/hostedtoolcache/node/24.14.1/x64/bin/node --experimental-import-meta-resolve --require /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs --conditions node --conditions development /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/dist/workers/forks.js nch bin/git git comm�� -m Extra commit t HEAD npushed-branch it git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel git /usr/bin/git /home/REDACTED/worgit config 86_64/node git rev-�� --show-toplevel git /usr/bin/git 434712338/.githu/bin/sh config son git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel git ache/node/24.14.1/x64/bin/node 2086818003 git /usr/bin/git ache/node/24.14.1/x64/bin/node 3404�� y git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha on' --ignore-path ../../../.prettierignore /opt/hostedtoolc/tmp/go-build3074489570/b135/vetowner=github node /tmp/go-build379git -trimpath 64/bin/go node ules�� ub/workflows --no-file-parallelism odules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node g GO111MODULE 64/bin/go tsc (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha 740477526/.github/workflows git /usr/bin/git --show-toplevel sh /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel sh /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq .object.sha ithub/workflows -buildtags /home/REDACTED/work/_temp/uv-python-dir/bash -errorsas -ifaceassert -nilfunc bash ns-l�� a/action_pins.json :latest /node_modules/.bin/node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha -bool -buildtags ode_modules/.bin/sh -errorsas -ifaceassert -nilfunc bash --no�� on' --ignore-path ../../../.prettierignore -tests ules/.bin/prettier /tmp/go-build379node -trimpath 64/bin/go node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha -bool -buildtags ode_modules/.bin/sh -errorsas -ifaceassert -nilfunc bash 5781�� on' --ignore-pat-s -tests (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha -bool -buildtags me: String!) { -test.short=true -errorsas -ifaceassert -nilfunc ache/go/1.25.8/x-test.v=true 6195�� on' --ignore-pat-test.timeout=10m0s -tests (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq .object.sha ithub/workflows -buildtags /home/REDACTED/.local/bin/bash -errorsas -ifaceassert ed } } bash --no�� on' --ignore-path ../../../.pret-exec -tests me: String!) { repository(owne-c /tmp/go-build379git -trimpath ed } } node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/githubnext/agentics/git/ref/tags/
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/# --jq .object.sha -json GO111MODULE $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuowner estl�� -json .cfg ode_modules/.binACCEPT GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu-f (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq .object.sha on' --ignore-path ../../../.prettierignore -tests ode_modules/.bin/sh /tmp/go-build379git -trimpath 64/bin/go bash --no�� lic_711202664/001 go me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -json GO111MODULE 64/bin/go node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq .object.sha 142807625/.github/workflows git /usr/bin/git --show-toplevel e/git /usr/bin/git git rev-�� 3652639522 git 64/pkg/tool/linux_amd64/compile --show-toplevel sh /usr/bin/git 64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion remote.origin.urgit GO111MODULE eutil.test sh -c '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch3619500024/001' '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch3619500024/001' /opt/hostedtoolcache/go/1.25.8/x64/bin/node se 4489570/b043/vetremote r: $owner, name:-v node (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion --show-toplevel git (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo h GOSUMDB GOWORK 64/bin/go htFeV4xoR1ARB/dX--write -uns�� re --log-level=e!../../../pkg/workflow/js/**/*.json /tmp/go-build307--ignore-path k/gh-aw/gh-aw/ac../../../.prettierignore -json GO111MODULE 64/bin/go /opt/hostedtoolc-importcfg (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo k/gh-aw/gh-aw/ac../../../.prettierignore GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc--write -uns�� re --log-level=e!../../../pkg/workflow/js/**/*.json /tmp/go-build307--ignore-path k/gh-aw/node_mod../../../.prettierignore -json GO111MODULE 64/bin/go /opt/hostedtoolc-test.v=true (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo /usr/bin/ls --get remote.origin.urrev-parse (http block)
  • https://api.github.com/repos/owner/repo/contents/file.md
    • Triggering command: /tmp/go-build7929126/b396/cli.test /tmp/go-build7929126/b396/cli.test -test.testlogfile=/tmp/go-build7929126/b396/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE /opt/hostedtoolc**/*.cjs -uns�� ath ../../../.pr**/*.json /tmp/go-build307--ignore-path k/gh-aw/gh-aw/ac../../../.prettierignore GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc--write (http block)
    • Triggering command: /tmp/go-build2830326131/b001/cli.test /tmp/go-build2830326131/b001/cli.test -test.testlogfile=/tmp/go-build2830326131/b001/testlog.txt -test.paniconexit0 -test.timeout=10m0s -test.run=Test --show-toplevel git /usr/bin/git user.name Test User /usr/bin/git git rev-�� --show-toplevel git /usr/bin/infocmp remove origin /usr/bin/git infocmp (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -c=4 -nolocalimports -importcfg /tmp/go-build7929126/b387/importcfg -embedcfg /tmp/go-build7929126/b387/embedcfg -pack -ato�� rvHS/96bAEs2L_tvFwwIUrvHS -buildtags me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -errorsas -ifaceassert -nilfunc /opt/hostedtoolc-buildtags (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name --show-toplevel git /usr/bin/git --show-toplevel tsc /usr/bin/git git show�� --verify --quiet /usr/bin/git --show-toplevel /bin/sh /usr/bin/git git (http block)
  • invalid.example.invalid
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git git conf�� user.name lure tions/setup/js/node_modules/.bin/git -M main /usr/sbin/git git init�� --bare --initial-branch=main k/gh-aw/gh-aw/actions/setup/js/node_modules/.bin/git '/tmp/bare-incregit '/tmp/bare-increadd cal/bin/git git (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI linked an issue Apr 4, 2026 that may be closed by this pull request
Copilot AI and others added 2 commits April 4, 2026 13:18
…and fix AWF binary sudo verification

- check_skip_if_check_failing.cjs: fail-open on API rate limit exceeded errors
  during pre_activation to avoid cascading failures when multiple workflows
  run simultaneously and exhaust the GitHub installation API rate limit
- install_awf_binary.sh: use sudo for AWF binary verification to fix
  Permission Denied errors on GPU runners (aw-gpu-runner-T4) where
  /usr/local/bin is not executable by non-root users
- Recompile all 179 workflow lock files to resolve stale lock file warnings

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1b64f36c-d272-4cfa-84fd-01900096e2cb

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
… coverage

- Use /\bapi rate limit\b|\brate limit exceeded\b/i with word boundaries to
  avoid false positives in check_skip_if_check_failing.cjs
- Add second test case covering the 'rate limit exceeded' pattern variant

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1b64f36c-d272-4cfa-84fd-01900096e2cb

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix daily issues report generator agent failure fix: fail-open on API rate limit in check_skip_if_check_failing; sudo for AWF binary verification on GPU runners Apr 4, 2026
Copilot AI requested a review from pelikhan April 4, 2026 13:21
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 4, 2026

Hey @Copilot 👋 — thanks for investigating the WHM Dashboard failures and identifying the two root causes (rate-limit mis-handling in check_skip_if_check_failing.cjs and the sudo gap in install_awf_binary.sh on GPU runners). The analysis is solid, and the approach (fail-open on rate limits, sudo for verification) looks right.

That said, the PR is currently just a planning stub — the single commit (Initial plan) carries no file changes (0 lines diff). The four bottom checklist items are still open:

  • Fix 1: handle API rate limit errors gracefully in check_skip_if_check_failing.cjs
  • Fix 2: use sudo when verifying AWF installation in install_awf_binary.sh
  • Run make recompile to fix stale lock files
  • Run make agent-finish to validate all changes

Per the project's contribution guidelines, agents must run make agent-finish (which covers build, test, lint, recompile, and format) before a PR is considered ready. Tests are also required for any functional change.

Here's a ready-to-use prompt you can pass to your coding agent to finish the work:

Continue implementing the fixes for PR #24482 in the github/gh-aw repository.

Context:
- The pre_activation workflow calls `check_skip_if_check_failing.cjs`, which currently calls
  `core.setFailed()` when it hits a GitHub API rate limit. This should be fail-open:
  log a warning and allow the job to continue rather than blocking the run.
- The Daily Issues Report Generator fails on GPU runners because `install_awf_binary.sh`
  runs `gh aw --version` without `sudo`, which fails when the binary is installed
  in a root-owned location on GPU runners.

Required changes:
1. **`check_skip_if_check_failing.cjs`** — detect HTTP 403/429 (rate-limit) responses
   from the GitHub API and replace `core.setFailed(...)` with `core.warning(...)`
   so the step is skipped gracefully rather than failing the workflow.

2. **`install_awf_binary.sh`** — wrap the verification step (`gh aw --version` or
   equivalent) with `sudo` so it succeeds on GPU runners where the binary lives
   in a root-owned path.

After making the changes:
- Run `make recompile` to regenerate any stale lock files.
- Run `make agent-finish` (build + test + lint + recompile + fmt + lint-errors)
  and ensure all checks pass before marking the PR ready for review.
- Add or update tests covering the rate-limit fail-open path in the CJS script
  (if the project has a test harness for workflow scripts).

Generated by Contribution Check · ● 1.7M ·

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented Apr 4, 2026

@lpcox @Mossaka

// due to transient GitHub API availability issues. When multiple workflows run
// simultaneously, they can exhaust the installation API rate limit, causing this
// check to fail. Failing open matches the behavior of other pre-activation checks.
if (/api rate limit|rate limit exceeded/i.test(errorMsg)) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot refactor into helper to detect rate limiting

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 4ced537. Extracted isRateLimitError(error) into error_helpers.cjs following the same pattern as isLockedError(), and updated check_skip_if_check_failing.cjs to use it. Added tests in error_helpers.test.cjs.

Move the rate limit detection regex into a dedicated isRateLimitError()
helper in error_helpers.cjs, following the same pattern as isLockedError().
Update check_skip_if_check_failing.cjs to use the helper.
Add tests for isRateLimitError in error_helpers.test.cjs.

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/294a40fd-3964-43aa-a722-81fbd321cd18

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI requested a review from pelikhan April 4, 2026 13:31
@pelikhan pelikhan marked this pull request as ready for review April 4, 2026 13:33
Copilot AI review requested due to automatic review settings April 4, 2026 13:33
@pelikhan pelikhan merged commit db0eea2 into main Apr 4, 2026
64 checks passed
@pelikhan pelikhan deleted the copilot/whm-fix-daily-issues-report-generator branch April 4, 2026 13:34
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses two independent pre-activation failures: it makes check_skip_if_check_failing fail-open when GitHub API rate limiting occurs, and it adjusts AWF installation verification on GPU/self-hosted runners by running the post-install --version check under sudo.

Changes:

  • Add isRateLimitError() helper and update check_skip_if_check_failing.cjs to fail-open (warn + set output true) on rate-limit errors while still hard-failing on other API errors.
  • Add/adjust unit tests to cover the new rate-limit handling behavior.
  • Run AWF post-install verification (awf --version) with sudo to avoid Permission denied on GPU runners.
Show a summary per file
File Description
actions/setup/sh/install_awf_binary.sh Runs the AWF --version verification under sudo to avoid permission issues on GPU runners.
actions/setup/js/error_helpers.cjs Adds isRateLimitError() helper for identifying GitHub API rate limit errors.
actions/setup/js/error_helpers.test.cjs Adds tests for isRateLimitError().
actions/setup/js/check_skip_if_check_failing.cjs Uses isRateLimitError() to fail-open (set output true + warnings) on rate-limit errors.
actions/setup/js/check_skip_if_check_failing.test.cjs Updates tests to validate the new fail-open rate-limit behavior and non-rate-limit hard-fail behavior.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 5/5 changed files
  • Comments generated: 1

# The AWF bundle may try to reach these endpoints on startup, causing the
# version check to fail with a connection error if the proxy rejects the request.
env -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \
sudo env -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sudo env ... "${AWF_INSTALL_DIR}/${AWF_INSTALL_NAME}" --version may fail on the "bundle" install path because the generated wrapper script executes node via PATH (exec node /usr/local/lib/awf/awf-bundle.js ...). Under sudo, PATH is often replaced by secure_path, which can either (a) not include the toolcache Node at all (leading to node: command not found) or (b) pick a different/older system Node, potentially breaking the bundle even though has_node_20 succeeded for the non-root user. Consider preserving a known-good PATH for this verification step (while still unsetting the DIFC vars), or making the wrapper/bundle invocation use an absolute Node path discovered earlier.

Suggested change
sudo env -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \
# Preserve the current PATH as well so bundle installs that execute `node`
# via PATH continue to use the same validated Node.js under sudo.
sudo env PATH="${PATH}" -u GITHUB_API_URL -u GITHUB_GRAPHQL_URL -u GH_HOST \

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[WHM] Workflow Health Dashboard — 2026-04-04

3 participants